﻿#pragma warning disable CS8618

using System.ComponentModel;

namespace zijian666.Updater;

/// <summary>
/// 本地数据类，包含软件的当前版本信息、安装目录、更新模式等属性。
/// </summary>
public partial class LocalData
{
    [Description("当前软件版本号")]
    public Version Version { get; set; }

    [Description("最后更新时间")]
    public DateTime UpdateTime
    {
        get;
        private set
        {
            field = value;
            _data[nameof(UpdateTime)] = new DataValue(nameof(UpdateTime), value.ToString("yyyy-MM-dd HH:mm:ss"))
            {
                IsReadOnly = true,
                IsSystem = false,
                Description = "最后更新时间",
                Value = value.ToString("yyyy-MM-dd HH:mm:ss")
            };
        }
    }

    [Description("markdown格式的描述信息, 也可以是一个url")]
    [TryReadString]
    public string Description { get; protected set; }

    [Description("更新模式 （full、patch、file）")]
    [DefaultValue(@"full")]
    public UpdateMode Mode { get; protected set; }

    [Description("软件安装目录")]
    [DefaultValue(@"${AppPath}")]
    public DirectoryInfo InstallDir { get; protected set; }

    [Description("更新中的临时目录")]
    [DefaultValue(@"${AppPath}\temp")]
    public DirectoryInfo TempDir { get; protected set; }
    [Description("备份目录")]
    [DefaultValue(@"${AppPath}\backup")]
    public DirectoryInfo BackupDir { get; protected set; }

    [Description("脚本目录")]
    [DefaultValue(@"${AppPath}\scripts")]
    public DirectoryInfo ScriptsDir { get; protected set; }

    [Description("服务器版本描述文件")]
    public string VersionMetadataUrl { get; protected set; }

    /// <summary>
    /// 当前应用程序名称（不带扩展名）。
    /// </summary>
    public static string AppName { get; } = Path.GetFileNameWithoutExtension(Environment.ProcessPath!)!;

    /// <summary>
    /// 当前应用程序所在目录的完整路径。
    /// </summary>
    public static string AppPath { get; } = Path.GetDirectoryName(Environment.ProcessPath!)!;

    /// <summary>
    /// 当前应用程序的完整路径（包含文件名和扩展名）。
    /// </summary>
    public static string AppFullName { get; } = Environment.ProcessPath!;

    /// <summary>
    /// 当前应用程序的工作目录（BaseDirectory）。
    /// </summary>
    public static string CD { get; } = AppContext.BaseDirectory;


}
